.panel-status-indicators-box,
.panel-status-menu-box {
- spacing: 4px;
-}
-
-.lock-screen-status-button-box {
spacing: 8px;
}
gdm/batch.js \
gdm/fingerprint.js \
gdm/loginDialog.js \
- gdm/powerMenu.js \
gdm/realmd.js \
gdm/util.js \
extensionPrefs/main.js \
ui/shellDBus.js \
ui/status/accessibility.js \
ui/status/keyboard.js \
- ui/status/lockScreenMenu.js \
ui/status/network.js \
ui/status/power.js \
ui/status/volume.js \
+++ /dev/null
-// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
-/*
- * Copyright 2011 Red Hat, Inc
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-const Gio = imports.gi.Gio;
-const Lang = imports.lang;
-
-const LoginManager = imports.misc.loginManager;
-
-const GdmUtil = imports.gdm.util;
-const PanelMenu = imports.ui.panelMenu;
-const PopupMenu = imports.ui.popupMenu;
-
-const PowerMenuButton = new Lang.Class({
- Name: 'PowerMenuButton',
- Extends: PanelMenu.SystemIndicator,
-
- _init: function() {
- /* Translators: accessible name of the power menu in the login screen */
- this.parent('system-shutdown-symbolic', _("Power"));
-
- this._loginManager = LoginManager.getLoginManager();
-
- this._settings = new Gio.Settings({ schema: GdmUtil.LOGIN_SCREEN_SCHEMA });
- this._settings.connect('changed::disable-restart-buttons',
- Lang.bind(this, this._updateVisibility));
-
- this._createSubMenu();
-
- // ConsoleKit doesn't send notifications when shutdown/reboot
- // are disabled, so we update the menu item each time the menu opens
- this.menu.connect('open-state-changed', Lang.bind(this,
- function(menu, open) {
- if (open) {
- this._updateHaveShutdown();
- this._updateHaveRestart();
- this._updateHaveSuspend();
- }
- }));
- this._updateHaveShutdown();
- this._updateHaveRestart();
- this._updateHaveSuspend();
- },
-
- _updateVisibility: function() {
- let shouldBeVisible = (this._haveSuspend || this._haveShutdown || this._haveRestart);
- this.actor.visible = shouldBeVisible && !this._settings.get_boolean('disable-restart-buttons');
- },
-
- _updateHaveShutdown: function() {
- this._loginManager.canPowerOff(Lang.bind(this, function(result) {
- this._haveShutdown = result;
- this._powerOffItem.actor.visible = this._haveShutdown;
- this._updateVisibility();
- }));
- },
-
- _updateHaveRestart: function() {
- this._loginManager.canReboot(Lang.bind(this, function(result) {
- this._haveRestart = result;
- this._restartItem.actor.visible = this._haveRestart;
- this._updateVisibility();
- }));
- },
-
- _updateHaveSuspend: function() {
- this._loginManager.canSuspend(Lang.bind(this, function(result) {
- this._haveSuspend = result;
- this._suspendItem.actor.visible = this._haveSuspend;
- this._updateVisibility();
- }));
- },
-
- _createSubMenu: function() {
- let item;
-
- item = new PopupMenu.PopupMenuItem(_("Suspend"));
- item.connect('activate', Lang.bind(this, this._onActivateSuspend));
- this.menu.addMenuItem(item);
- this._suspendItem = item;
-
- item = new PopupMenu.PopupMenuItem(_("Restart"));
- item.connect('activate', Lang.bind(this, this._onActivateRestart));
- this.menu.addMenuItem(item);
- this._restartItem = item;
-
- item = new PopupMenu.PopupMenuItem(_("Power Off"));
- item.connect('activate', Lang.bind(this, this._onActivatePowerOff));
- this.menu.addMenuItem(item);
- this._powerOffItem = item;
- },
-
- _onActivateSuspend: function() {
- if (!this._haveSuspend)
- return;
-
- this._loginManager.suspend();
- },
-
- _onActivateRestart: function() {
- if (!this._haveRestart)
- return;
-
- this._loginManager.reboot();
- },
-
- _onActivatePowerOff: function() {
- if (!this._haveShutdown)
- return;
-
- this._loginManager.powerOff();
- }
-});
}
});
+const AggregateMenu = new Lang.Class({
+ Name: 'AggregateMenu',
+ Extends: PanelMenu.Button,
+
+ _init: function() {
+ this.parent(0.0, _("Settings Menu"), false);
+
+ this._indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box' });
+ this.actor.add_child(this._indicators);
+
+ this._network = new imports.ui.status.network.NMApplet();
+ this._bluetooth = new imports.ui.status.bluetooth.Indicator();
+ this._power = new imports.ui.status.power.Indicator();
+ this._volume = new imports.ui.status.volume.Indicator();
+ this._system = new imports.ui.status.system.Indicator();
+
+ this._indicators.add_child(this._network.indicators);
+ this._indicators.add_child(this._bluetooth.indicators);
+ this._indicators.add_child(this._power.indicators);
+ this._indicators.add_child(this._volume.indicators);
+ this._indicators.add_child(this._system.indicators);
+ this._indicators.add_child(new St.Label({ text: '\u25BE' }));
+
+ this.menu.addMenuItem(this._volume.menu);
+ this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
+ this.menu.addMenuItem(this._network.menu);
+ this.menu.addMenuItem(this._bluetooth.menu);
+ this.menu.addMenuItem(this._power.menu);
+ this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
+ this.menu.addMenuItem(this._system.menu);
+ },
+});
+
const PANEL_ITEM_IMPLEMENTATIONS = {
'activities': ActivitiesButton,
+ 'aggregateMenu': AggregateMenu,
'appMenu': AppMenuButton,
'dateMenu': imports.ui.dateMenu.DateMenuButton,
'a11y': imports.ui.status.accessibility.ATIndicator,
'a11yGreeter': imports.ui.status.accessibility.ATGreeterIndicator,
- 'volume': imports.ui.status.volume.Indicator,
- 'battery': imports.ui.status.power.Indicator,
- 'lockScreen': imports.ui.status.lockScreenMenu.Indicator,
'keyboard': imports.ui.status.keyboard.InputSourceIndicator,
- 'powerMenu': imports.gdm.powerMenu.PowerMenuButton,
- 'system': imports.ui.status.system.Indicator,
};
-if (Config.HAVE_BLUETOOTH)
- PANEL_ITEM_IMPLEMENTATIONS['bluetooth'] =
- imports.ui.status.bluetooth.Indicator;
-
-try {
- PANEL_ITEM_IMPLEMENTATIONS['network'] =
- imports.ui.status.network.NMApplet;
-} catch(e) {
- log('NMApplet is not supported. It is possible that your NetworkManager version is too old');
-}
-
const Panel = new Lang.Class({
Name: 'Panel',
*/
const SystemIndicator = new Lang.Class({
Name: 'SystemIndicator',
- Extends: Button,
_init: function() {
- this.parent(0.0);
- this.actor.add_style_class_name('panel-status-button');
-
- this.indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box' });
- this.actor.add_actor(this.indicators);
+ this.indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box',
+ reactive: true });
+ this.menu = new PopupMenu.PopupMenuSection();
},
addIndicator: function(gicon) {
return icon;
}
});
+Signals.addSignalMethods(SystemIndicator.prototype);
panel: {
left: [],
center: ['dateMenu'],
- right: ['a11yGreeter', 'display', 'keyboard',
- 'volume', 'battery', 'powerMenu']
+ right: ['a11yGreeter', 'keyboard', 'aggregateMenu'],
},
panelStyle: 'login-screen'
},
panel: {
left: [],
center: [],
- right: ['lockScreen']
+ right: ['aggregateMenu']
},
panelStyle: 'lock-screen'
},
panel: {
left: [],
center: [],
- right: ['a11y', 'keyboard', 'lockScreen']
+ right: ['a11y', 'keyboard', 'aggregateMenu']
},
panelStyle: 'unlock-screen'
},
panel: {
left: ['activities', 'appMenu'],
center: ['dateMenu'],
- right: ['a11y', 'keyboard', 'volume', 'bluetooth',
- 'network', 'battery', 'system']
+ right: ['a11y', 'keyboard', 'aggregateMenu']
}
}
};
+++ /dev/null
-// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
-
-const Clutter = imports.gi.Clutter;
-const GObject = imports.gi.GObject;
-const Lang = imports.lang;
-const St = imports.gi.St;
-
-const Main = imports.ui.main;
-const PanelMenu = imports.ui.panelMenu;
-const PopupMenu = imports.ui.popupMenu;
-const VolumeMenu = imports.ui.status.volume;
-
-const FakeStatusIcon = new Lang.Class({
- Name: 'FakeStatusIcon',
-
- _init: function(button) {
- this.actor = new St.BoxLayout({ style_class: 'panel-status-button-box' });
- this._button = button;
- this._button.connect('icons-updated', Lang.bind(this, this._reconstructIcons));
- this._button.actor.bind_property('visible', this.actor, 'visible',
- GObject.BindingFlags.SYNC_CREATE);
- this._reconstructIcons();
- },
-
- _reconstructIcons: function() {
- this.actor.destroy_all_children();
- this._button.icons.forEach(Lang.bind(this, function(icon) {
- let newIcon = new St.Icon({ style_class: 'system-status-icon' });
- icon.bind_property('gicon', newIcon, 'gicon',
- GObject.BindingFlags.SYNC_CREATE);
- icon.bind_property('visible', newIcon, 'visible',
- GObject.BindingFlags.SYNC_CREATE);
- this.actor.add_actor(newIcon);
- }));
- }
-});
-
-const Indicator = new Lang.Class({
- Name: 'LockScreenMenuIndicator',
- Extends: PanelMenu.SystemIndicator,
-
- _init: function() {
- this.parent(null, _("Volume, network, battery"));
- this.indicators.style_class = 'lock-screen-status-button-box';
-
- this._volumeControl = VolumeMenu.getMixerControl();
- this._volumeMenu = new VolumeMenu.VolumeMenu(this._volumeControl);
- this.menu.addMenuItem(this._volumeMenu);
-
- this._volume = new FakeStatusIcon(Main.panel.statusArea.volume);
- this.indicators.add_child(this._volume.actor);
-
- // Network may not exist if the user doesn't have NetworkManager
- if (Main.panel.statusArea.network) {
- this._network = new FakeStatusIcon(Main.panel.statusArea.network);
- this.indicators.add_child(this._network.actor);
- }
-
- this._battery = new FakeStatusIcon(Main.panel.statusArea.battery);
- this.indicators.add_child(this._battery.actor);
- }
-});